ExcelVBA处理图形图表.docx |
您所在的位置:网站首页 › vba addshape › ExcelVBA处理图形图表.docx |
ExcelVBA处理图形图表.docx 《ExcelVBA处理图形图表.docx》由会员分享,可在线阅读,更多相关《ExcelVBA处理图形图表.docx(27页珍藏版)》请在冰豆网上搜索。 ExcelVBA处理图形图表 Shape(图形)、Chart(图表)对象在工作表中添加图形 如果需要在工作表中添加图形对象,可以使用AddShape方法,如下面的代码所示。 #001SubAddShape() #002DimmyShapeAsShape #003OnErrorResumeNext #004Sheet1.Shapes("myShape").Delete #005SetmyShape=Sheet1.Shapes.AddShape(msoShapeRectangle,40,120,280,30) #006WithmyShape #007.Name="myShape" #008With.TextFrame.Characters #009.Text="单击将选择Sheet2! " #010With.Font #011.Name="华文行楷" #012.FontStyle="常规" #013.Size=22 #014.ColorIndex=7 #015EndWith #016EndWith #017With.TextFrame #018.HorizontalAlignment=-4108 #019.VerticalAlignment=-4108 #020EndWith #021.Placement=3 #022EndWith #023myShape.Select #024WithSelection.ShapeRange #025With.Line #026.Weight=1 #027.DashStyle=msoLineSolid #028.Style=msoLineSingle #029.Transparency=0 #030.Visible=msoTrue #031.ForeColor.SchemeColor=40 #032.BackColor.RGB=RGB(255,255,255) #033EndWith #034With.Fill #035.Transparency=0 #036.Visible=msoTrue #037.ForeColor.SchemeColor=41 #038.OneColorGradient1,4,0.23 #039EndWith #040EndWith #041Sheet1.Range("A1").Select #042Sheet1.Hyperlinks.AddAnchor: =myShape,Address: ="",_ #043SubAddress: ="Sheet2! A1",ScreenTip: ="选择Sheet2! " #044SetmyShape=Nothing #045EndSub 代码解析: AddShape过程在工作表中添加一个矩形并设置其外观等属性。 第2行代码声明变量myShape的对象类型。 第3、4行代码删除可能存在的名称为“myShape”的图形对象。 第5行代码使用AddShape方法在工作表中添加一个矩形。 当该方法应用于Shapes对象时,返回一个Shape对象,该对象代表工作表中的新自选图形,语法如下: expression.AddShape(Type,Left,Top,Width,Height) 参数expression是必需的,返回一个Shapes对象。 参数Type是必需的,指定要创建的自选图形的类型。 参数Left和Top是必需的,以磅为单位给出自选图形边框左上角的位置。 参数Width和Height是必需的,以磅为单位给出自选图形边框的宽度和高度。 第7行代码将新建图形命名为“myShape”,向Shapes集合添加新的图形时,将对新添加的图形赋以默认的名称,若要为图形指定更有意义的名称,可指定其Name属性。 第8行到第16行代码为矩形添加文字,并设定其格式。 其中第8行代码使用TextFrame属性和Characters方法返回该矩形的字符区域。 应用于Shape对象的TextFrame属性返回一个TextFrame对象,该对象包含指定图形对象的对齐和定位属性;Characters方法返回一个Characters对象,该对象代表某个图形的文本框中的字符区域,语法如下: expression.Characters(Start,Length) 参数expression是必需的,返回一个指定文本框内Characters对象的表达式。 参数Start是可选的,表示将要返回的第一个字符,如果此参数设置为1或被忽略,则Characters方法会返回以第一个字符为起始字符的字符区域。 参数Length是可选的,表示要返回的字符个数。 如果此参数被忽略,则Characters方法会返回该字符串的剩余部分(由Start参数指定的字符以后的所有字符)。 第9行代码为矩形添加文字,应用于Characters对象的Text属性返回或设置对象的文本,为可读写的String类型。 第10行到第15行代码设置矩形中文字的属性,应用于Characters对象Font属性返回一个Font对象,该对象代表指定对象的字体属性(字体名称、字体大小、字体颜色等),第11行代码设置字体名称,第12行代码设置字体样式,第13行代码设置字体大小,第14行代码颜色。 第17行到第20行代码设定矩形中文字的对齐方式。 应用于TextFrame对象的HorizontalAlignment属性返回或设置指定对象的水平对齐方式,可为表格531所示的XlHAlign常量之一。 常量 值 描述 xlHAlignCenter -4108 居中 xlHAlignCenterAcrossSelection 7 靠左 xlHAlignDistributed -4117 分散对齐 xlHAlignFill 5 分散对齐 xlHAlignGeneral 1 靠左 xlHAlignJustify -4130 两端对齐 xlHAlignLeft -4131 靠左 xlHAlignRight -4152 靠右 表格531HorizontalAlignment属性的XlHAlign常量 应用于TextFrame对象的VerticalAlignment属性返回或设置指定对象的垂直对齐方式,可为表格532所示的XlHAlign常量之一。 常量 值 描述 xlVAlignCenter -4108 居中 xlVAlignJustify -4130 两端对齐 xlVAlignBottom -4107 靠下 xlVAlignDistributed -4117 分散对齐 xlVAlignTop -4160 靠上 表格532VerticalAlignment属性的XlHAlign常量 第21行代码设置矩形大小和位置不随单元格而变,应用于Shape对象的Placement属性返回或设置对象与所在的单元格之间的附属关系,可为表格533所示的XlPlacement常量之一。 常量 值 描述 xlFreeFloating 3 大小、位置均固定 xlMove 2 大小固定、位置随单元格而变 xlMoveAndSize 1 大小、位置随单元格而变 表格533XlPlacement常量 第24行到第32行代码设置矩形的边框线条格式,应用于ShapeRange集合的Line属性返回一个LineFormat对象,该对象包含指定图形的线条格式属性。 其中第26行代码设置矩形线条粗细,第27行代码设置矩形线条的虚线样式,第28行代码设置矩形填充的透明度,第29行代码设置矩形为可见,第30行代码设置矩形的前景色,第31行代码设置矩形填充背景的颜色。 第33行到第38行代码设置矩形的内部填充格式,应用于ShapeRange集合的Fill属性返回FillFormat对象,该对象包含指定的图表或图形的填充格式属性。 其中第35行代码设置矩形内部的透明度,第36行代码设置矩形内部为可见,第37行代码设置矩形内部的前景色,第38行代码将矩形内部指定填充设为单色渐变,应用于FillFormat对象的OneColorGradient方法将指定填充设为单色渐变,语法如下: expression.OneColorGradient(Style,Variant,Degree) 其中参数Style是必需的,底纹样式,可为表格541所示的MsoGradientStyle常量之一。 常量 值 描述 msoGradientDiagonalDown 4 斜下 msoGradientDiagonalUp 3 斜上 msoGradientFromCenter 7 无 msoGradientFromCorner 5 角部幅射 msoGradientFromTitle 6 中心幅射 msoGradientHorizontal 1 水平 msoGradientMixed -2 无 msoGradientVertical 2 垂直 表格534MsoGradientStyle常量 参数Variant是必需的,渐变变量。 取值范围为1到4之间,分别与“填充效果”对话框中“渐变”选项卡的四个渐变变量相对应。 如果GradientStyle设为msoGradientFromCenter,则Variant参数只能设为1或2。 参数Degree是必需的,灰度。 取值范围为0.0(表示最深)到1.0(表示最浅)之间。 第42、43行代码为矩形对象添加超链接,应用于Hyperlinks对象的Add方法向指定的区域或图形添加超链接,语法如下: expression.Add(Anchor,Address,SubAddress,ScreenTip,TextToDisplay) 参数expression是必需的,返回一个Hyperlinks对象。 参数Anchor是必需的,超链接的位置。 可为Range对象或Shape对象。 参数Address是必需的,超链接的地址。 参数SubAddress是必需的,超链接的子地址。 参数ScreenTip是可选的,当鼠标指针停留在超链接上时所显示的屏幕提示。 参数TextToDisplay是可选的,要显示的超链接的文本。 运行AddShape过程结果如图531所示。 图531在工作表中添加图形 技巧1导出工作表中的图片 有时需要将工作表中的图形对象保存为单独的图像文件,可以使用Export方法将工作表中的图片以文件形式导出,如下面的代码所示。 #001SubExportShp() #002DimShpAsShape #003DimFileNameAsString #004ForEachShpInSheet1.Shapes #005IfShp.Type=msoPictureThen #006FileName=ThisWorkbook.Path&"\"&Shp.Name&".gif" #007Shp.Copy #008WithSheet1.ChartObjects.Add(0,0,Shp.Width+28,Shp.Height+30).Chart #009.Paste #010.ExportFileName,"gif" #011.Parent.Delete #012EndWith #013EndIf #014Next #015EndSub 代码解析: ExportShp过程将Sheet1工作表的所有图片以文件形式导出到同一目录中。 第4行代码使用ForEach...Next语句遍历Sheet1工作表中的所有图形。 第5行代码判断图形的类型是否为图片,应用于Shape对象的Type属性返回或设置图形类型,可以为表格541所示的MsoShapeType常量之一。 常量 值 说明 msoShapeTypeMixed -2 混合型图形 msoAutoShape 1 自选图形 msoCallout 2 没有边框线的标注 msoChart 3 图表 msoComment 4 批注 msoFreeform 5 任意多边形 msoGroup 6 图形组合 msoFormControl 8 窗体控件 msoLine 9 线条 msoLinkedOLEObject 10 链接式或内嵌OLE对象 msoLinkedPicture 11 剪贴画或图片 msoOLEControlObject 12 ActiveX控件 msoPicture 13 图片 msoTextEffect 15 艺术字 msoTextBox 17 文本框 msoDiagram 21 组织结构图或其他图示 表格541MsoShapeType常量 第6行代码使用字符串变量FileName记录需导出图形的路径和名称。 第7行代码复制图形,应用于Shape对象的Copy方法将对象复制到剪贴板。 第8行代码使用Add方法在工作表中添加一个图表,应用于ChartObjects对象的Add方法创建新的嵌入图表,语法如下: expression.Add(Left,Top,Width,Height) 参数expression是必需的,返回一个ChartObjects对象。 参数Left、参数Top是必需的,以磅为单位给出新对象的初始坐标,该坐标是相对于工作表上单元格A1的左上角或图表的左上角的坐标。 参数Width、参数Height是必需的,以磅为单位给出新对象的初始大小。 第9行代码使用Paste方法将图形粘贴到新的嵌入图表中,应用于Chart对象的Paste方法将剪贴板中的图表数据粘贴到指定的图表中,语法如下: expression.Paste(Type) 参数expression是必需的,返回一个Chart对象。 参数Type是可选的的,如果剪贴板中有图表,本参数指定要粘贴的图表信息。 可为以下XlPasteType常量之一: xlFormats、xlFormulas或xlAll。 默认值为xlAll,如果剪贴板中是数据不是图表,则不能使用本参数。 第10行代码使用Export方法将图表导出到同一目录中,应用于Chart对象的Export方法以图形格式导出图表,语法如下: expression.Export(Filename,FilterName,Interactive) 其中参数Filename是必需的,被导出的文件的名称。 第10行代码删除新建的图表。 因为Chart对象是不能使用Delete方法直接删除的,应先使用Parent属性返回指定对象的父对象,然后使用Delete方法删除。 技巧2在工作表中添加艺术字 在工作表中插入艺术字,可以使用AddTextEffect方法,如下面的代码所示。 #001SubTextEffect() #002DimmyShapeAsShape #003OnErrorResumeNext #004Sheet1.Shapes("myShape").Delete #005SetmyShape=Sheet1.Shapes.AddTextEffect_ #006(PresetTextEffect: =msoTextEffect15,_ #007Text: ="我爱ExcelHome",FontName: ="宋体",FontSize: =36,_ #008FontBold: =msoFalse,FontItalic: =msoFalse,_ #009Left: =100,Top: =100) #010WithmyShape #011.Name="myShape" #012With.Fill #013.Solid #014.ForeColor.SchemeColor=55 #015.Transparency=0 #016EndWith #017With.Line #018.Weight=1.5 #019.DashStyle=msoLineSolid #020.Style=msoLineSingle #021.Transparency=0 #022.ForeColor.SchemeColor=12 #023.BackColor.RGB=RGB(255,255,255) #024EndWith #025EndWith #026SetmyShape=Nothing #027EndSub 代码解析: TextEffect过程在工作表中插入艺术字并设置其格式。 第3、4行代码删除工作表中可能存在的艺术字,以免重复添加。 第5行到第9行代码使用AddTextEffect方法在工作表中插入艺术字,AddTextEffect方法创建艺术字对象。 返回一个Shape对象,该对象代表新建的艺术字对象,语法如下: expression.AddTextEffect(PresetTextEffect,Text,FontName,FontSize,FontBold,FontItalic,Left,Top) 参数expression是必需的,返回一个Shapes对象。 参数PresetTextEffect是必需的,艺术字预置文本效果,可为MsoPresetTextEffect常量之一,等同于在工作表中插入艺术字时的样式选项卡,如图551所示。 图551艺术字样式 参数Text是必需的,艺术字对象中的文字。 参数FontName是必需的,艺术字对象中所用的字体名称。 参数FontSize是必需的,以磅为单位给出艺术字对象中所用的字体大小。 参数FontBold是必需的,在艺术字中要加粗的字体。 参数FontItalic是必需的,在艺术字中要倾斜的字体。 参数Left和参数Top是必需的,相对于文档的左上角、顶部,以磅为单位给出艺术字对象边框左上角的位置。 第11行代码将艺术字对象重命名为“myShape”。 第12行到第16行代码设置艺术字对象的填充格式。 其中第13行代码将填充格式设置为均一的颜色,应用于FillFormat对象的Solid方法将指定的填充格式设置为均一的颜色,可用本方法将带有渐进色、纹理、图案或背景的填充格式转换为单色的填充格式。 第14行代码设置填充的颜色。 第15行代码设置填充的透明度。 第17行到第24行代码设置艺术字对象的线条格式属性。 其中第18行代码设置线条粗细,第19行代码设置线条虚线样式,第20行代码设置线条区域的样式,第21行代码设置线条的透明度,第22行代码设置前景色,第23行代码设置填充背景的颜色。 运行TextEffect过程工作表中如图552所示。 图552工作表中插入艺术字 技巧3遍历工作表中的图形 工作表中的多个图形,如果使用系统缺省名称,如“文本框1”、“文本框2”这样前面是固定的字符串,后面是序号的,可以使用For...Next语句遍历图形,如下面的代码所示。 #001SubErgShapes_1() #002DimiAsInteger #003Fori=1To4 #004Sheet1.Shapes("文本框"&i).TextFrame.Characters.Text="" #005Next #006EndSub 代码解析: ErgShapes_1过程清除工作表中四个图形文本框中的文字。 第3行到第5行代码,使用Shapes属性在工作表上的三个图形文本框中循环。 Shapes属性返回Shapes对象,代表工作表或图形工作表上的所有图形,可以使用Shapes(index)返回单个的Shape对象,其中index是图形的名称或索引号。 返回单个的Shape对象后使用TextFrame属性和Characters方法清除文本框中的字符,关于Shape对象的TextFrame属性和Characters方法请参阅技巧53。 如果图形的名称没有规律,可以使用ForEach...Next语句循环遍历所有图形,根据Type属性返回的图形类型进行相应的操作,如下面的代码所示。 #001SubErgShapes_2() #002DimmyShapeAsShape #003DimiAsInteger #004i=1 #005ForEachmyShapeInSheet1.Shapes #006IfmyShape.Type=msoTextBoxThen #007myShape.TextFrame.Characters.Text="这是第"&i&"个文本框" #008i=i+1 #009EndIf #010Next #011EndSub 代码解析: ErgShapes_2过程在工作表中的所有图形文本框中写入文本。 第5行代码使用ForEach...Next语句循环遍历工作表中所有的图形对象。 第6行到第9行代码如果图形对象是文本框则在文本框中写入文本。 其中第6行代码根据Type属性判断图形对象是否为文本框,应用于Shape对象的Type属性返回或设置图形类型,MsoShapeType类型,请参阅表格541。 第7行代码根据返回的Type属性值在所有的文本框内写入相应的文本,如图561所示。 图561遍历所有的文本框 技巧4移动、旋转图片 工作表中的图片可以移动、旋转,如下面的代码所示。 #001SubMoveShape() #002DimiAsLong #003DimjAsLong #004WithSheet1.Shapes (1) #005Fori=1To3000Step5 #006.Top=Sin(i*(3.1416/180))*100+100 #007.Left=Cos(i*(3.1416/180))*100+100 #008.Fill.ForeColor.RGB=i*100 #009Forj=1To10 #010.IncrementRotation-2 #011DoEvents #012Next #013Next #014EndWith #015EndSub 代码解析: MoveShape过程移动、旋转工作表中的图片并不断改变其填充的前景色。 第6行代码设置图片的Top属性值,应用于Shape对象的Top属性设置图形的顶 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |